home *** CD-ROM | disk | FTP | other *** search
/ Windows 95 API Bible / Windows 95 API Bible 3 Disc Set.iso / Win32 API Bible Book 1 of 3 / CHAPTE18 / EX4.C < prev    next >
C/C++ Source or Header  |  1994-12-27  |  4KB  |  123 lines

  1. #include <genstub.c>
  2.  
  3. LRESULT CALLBACK WndProc (HWND  hWnd,  UINT uMsg, WPARAM wParam,  LPARAM lParam)
  4. {
  5.    static      UINT   wClipFormat;       // registered clipboard format
  6.  
  7.    switch (uMsg)         /* process windows messages */
  8.    {
  9.          case WM_CREATE:
  10.                  /* register the format "SPECIAL" when the window is created */
  11.                  /* multiple instances of the program will only register the format once */
  12.                  wClipFormat = RegisterClipboardFormat( "SPECIAL" );
  13.                  /* set clipboard for delayed  rendering*/
  14.                  OpenClipboard( hWnd );   
  15.                  EmptyClipboard( );   
  16.                  SetClipboardData( CF_TEXT, 0 );
  17.                  if (wClipFormat)
  18.                     SetClipboardData( wClipFormat, 0 );
  19.                  CloseClipboard( );
  20.                  break ;
  21.          case WM_RENDERALLFORMATS:
  22.          case WM_RENDERFORMAT:     
  23.              {   /* delayed rendering of clipboard formats - now put data in clipboard */
  24.  
  25.                  HANDLE hMem;
  26.                  LPVOID lpData;
  27.  
  28.                  OpenClipboard( hWnd );
  29.                  EmptyClipboard( );
  30.  
  31.                  /* render CF_TEXT format */
  32.                  hMem = GlobalAlloc( GHND, 64 );
  33.                  lpData = GlobalLock( hMem );
  34.                  lstrcpy( lpData, "Text In Clipboard" );
  35.                  GlobalUnlock( hMem );
  36.                  SetClipboardData( CF_TEXT, hMem );
  37.  
  38.                  /* render format "SPECIAL" */
  39.  
  40.                  if (wClipFormat)
  41.                  {
  42.                     hMem = GlobalAlloc( GHND, 64 );
  43.                     lpData = GlobalLock( hMem );
  44.                     lstrcpy( lpData, "Private format  SPECIAL data in clipboard" );
  45.                     GlobalUnlock( hMem );
  46.                     SetClipboardData( wClipFormat, hMem );
  47.                  }
  48.                  CloseClipboard( );
  49.                }  
  50.                break ;
  51.  
  52.          case WM_PAINT:
  53.               {
  54.                  HANDLE hMem;
  55.                  LPVOID lpData;
  56.                  PAINTSTRUCT ps;
  57.                  char   cBuf[128];
  58.                  UINT wPriorityList[ 2 ];    // list of clipboard formats to search for
  59.  
  60.                  BeginPaint( hWnd, &ps );
  61.  
  62.                  /* check state of CF_TEXT first */
  63.  
  64.                  OpenClipboard( hWnd );
  65.                  hMem = GetClipboardData( CF_TEXT );
  66.                  if ( hMem )
  67.                  {
  68.                     lpData = GlobalLock( hMem );
  69.                     TextOut( ps.hdc, 10, 10, cBuf, wsprintf( cBuf,
  70.                             "CF_TEXT contains: %s", lpData ) ) ;
  71.                     GlobalUnlock( hMem );
  72.                  }
  73.                  CloseClipboard( );
  74.  
  75.                  /* now check state of SPECIAL format */
  76.          
  77.                  OpenClipboard( hWnd );
  78.                  wPriorityList[ 0 ] = wClipFormat ;
  79.                  wPriorityList[ 1 ] = CF_TEXT ;
  80.                  if ( wClipFormat = GetPriorityClipboardFormat( wPriorityList, 2 ) )
  81.                  {
  82.                     hMem = GetClipboardData( wClipFormat );
  83.                     lpData = GlobalLock( hMem );
  84.                     TextOut( ps.hdc, 10, 30, cBuf, wsprintf( cBuf,
  85.                              "Special CB Format contains: %s", lpData ) );
  86.                     GlobalUnlock( hMem );
  87.                  }
  88.                  else {
  89.                     TextOut( ps.hdc, 10, 30, cBuf, wsprintf( cBuf,
  90.                              "Special CB Format not available." ) ) ;
  91.                  }
  92.                  CloseClipboard( );
  93.                  EndPaint( hWnd, &ps );
  94.                }  
  95.                break ;
  96.  
  97.        case WM_COMMAND:   
  98.                switch (wParam)
  99.                {
  100.                   case IDM_TEST:   /* provoke paint to show state of clipboard formats */   
  101.                         InvalidateRect( hWnd, NULL, TRUE );
  102.                   break;
  103.                   case IDM_EXIT:   
  104.                         DestroyWindow( hWnd );
  105.                   break;
  106. #include <aboutopt.c>
  107.                }
  108.                break;
  109.  
  110. #include <rbutton.c>
  111.  
  112.        case WM_DESTROY:         /* stop application */
  113.                PostQuitMessage( 0 );
  114.                break;
  115.  
  116.        default:   /* default windows message processing */
  117.                return DefWindowProc( hWnd, uMsg, wParam, lParam );
  118.    }
  119.    return (0L) ;
  120. }
  121.  
  122. #include <about.c>
  123.